--[[------------------------------------------------------------------------------------------------ База данных живых онлайновых объектов, зон и рестрикторов, актёра Чугай Александр --------------------------------------------------------------------------------------------------]] used_level_vertex_ids = {} OnlineStalkers = {} campfire_by_name = nil campfire_table_by_smart_names = {} zone_by_name = {} --mlr bridge_by_name = {} --mlr script_ids = {} storage = {} actor = nil actor_proxy = actor_proxy.actor_proxy() heli = {} camp_storage = {} story_by_id = {} smart_terrain_by_id = {} info_restr = {} heli_enemies = {} anim_obj_by_name = {} goodwill = {sympathy = {}, relations = {}} story_object = {} signal_light = {} offline_objects = {} anomaly_by_name = {} level_doors = {} -- Содержит список всех дверей на уровне (чтобы нпс могли по нему пробегаться и открывать двери, рядом с которыми они стоят. no_weap_zones = {} spawned_vertex_by_id= {} dynamic_ltx = {} vehicle = nil actor_inside_zones = {} -- only because some sr have complex shape and this also easier to see what restrictor actor in for debug --mlr function add_bridge( bridge, binder ) printf("adding bridge %s",bridge:name()) bridge_by_name[bridge:name()] = binder add_obj( bridge ) end function del_bridge( bridge ) bridge_by_name[bridge:name()] = nil del_obj( bridge ) end function add_enemy(obj) local id = obj:id() for i,v in ipairs(heli_enemies) do if (v == id) then return end end heli_enemies[#heli_enemies+1] = id end function delete_enemy(obj) local id = obj:id() local remove_me for i=1,#heli_enemies do if (heli_enemies[i] == id) then remove_me = i break end end table.remove(heli_enemies,remove_me) end function add_obj( obj ) --printf("adding object %s",obj:name()) storage[obj:id()].object = obj if (obj:clsid() == clsid.script_stalker) then add_stalker(obj) end end function del_obj( obj ) storage[obj:id()] = nil if (obj:clsid() == clsid.script_stalker) then del_stalker(obj) end end function add_zone( zone ) zone_by_name[zone:name()] = zone end function del_zone( zone ) zone_by_name[zone:name()] = nil end function add_anomaly( anomaly ) anomaly_by_name[anomaly.object:name()] = anomaly end function del_anomaly( anomaly ) anomaly_by_name[anomaly.object:name()] = nil end function add_actor( obj ) actor = obj actor_proxy:net_spawn( obj ) add_obj( obj ) end function del_actor() del_obj( actor ) actor_proxy:net_destroy() actor = nil end function add_heli(obj) heli[obj:id()] = obj end function del_heli(obj) heli[obj:id()] = nil end function add_smart_terrain( obj ) smart_terrain_by_id[obj.id] = obj end function del_smart_terrain( obj ) smart_terrain_by_id[obj.id] = nil end function add_anim_obj(anim_obj, binder) anim_obj_by_name[anim_obj:name()] = binder add_obj(anim_obj) end function del_anim_obj(anim_obj) anim_obj_by_name[anim_obj:name()] = nil del_obj(anim_obj) end function add_stalker(npc) local id = npc:id() for i,v in ipairs(db.OnlineStalkers) do if (v == id) then return end end db.OnlineStalkers[#db.OnlineStalkers+1] = id end function del_stalker(npc) if not (db.OnlineStalkers) then return end local index for i=#db.OnlineStalkers,1,-1 do if (npc:id() == db.OnlineStalkers[i]) then index = i break end end table.remove(db.OnlineStalkers,index) end